/*
访问修饰符: 用来描述类内部的属性/方法的可访问性
  public: 默认值, 公开的外部也可以访问
  protected: 类内部和子类可以访问
  private: 只能类内部可以访问
*/
(function () {
    class Animal {
        constructor(name) {
            this.age = 2; // 受保护的, 外部只有子类型可见
            this.sex = '雄'; // 私有的, 只能内部可见
            this.name = name;
        }
        run(distance = 0) {
            console.log(this.sex);
            console.log(`${this.name} run ${distance}m`);
        }
    }
    class Snake extends Animal {
        constructor(name) {
            // 调用父类型构造方法
            super(name);
        }
        // 重写父类型的方法
        run(distance = 5) {
            console.log(this.name, this.age);
        }
    }
    const a = new Animal('abc');
})();
